/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bean;

import java.util.List;
import javax.ejb.EJB;
import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import negocio.GestorFotosLocal;
import negocio.GestorGeoLocal;
import negocio.GestorObraLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */

public class GeolocalizacionBean {
    @EJB(beanName = "GestorGeoBean")
    private GestorGeoLocal gestorGeoBean;
    @EJB(beanName = "GestorObraBean")
    private GestorObraLocal gestorObraBean;
    @EJB(beanName = "GestorFotosBean")
    private GestorFotosLocal gestorFotosBean;
   

    private String descripcion;
    //Latitud y longitud de Cordoba Capital
    private String latitud="-31.409912194070973";
    private String longitud="-64.2041015625";
    private String calle;
    private String nroCalle;
    private String barrio;
    private String localidad="";
    private String localidadEnc="";
    private String departamento="";
    private String departamentoEnc="";
    private String provincia="";
    private String provinciaEnc="";
    private String pais="";
    private String paisEnc="";
    private String tipoObra="";
    private String subtipoObra = "";
    private int idObra=-1;
    private int idPais=-1;
    private int idProvincia = -1;
    private int idDepartamento = -1;
    private int idLocalidad = -1;
    private int idPaisEnc=-1;
    private int idProvinciaEnc = -1;
    private int idDepartamentoEnc = -1;
    private int idLocalidadEnc = -1;
    private int idTipoObra=-1;
    private int idSubtipoObra = -1;
    private int zoom=5;
    private String tipoGeocoding;

//    private String ubicarPor = "COORDENADAS";
//    private boolean ubicarPorCoordenadas = true;

    /** Creates a new instance of GeolocalizacionBean */
    public GeolocalizacionBean() {
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the latitud
     */
    public String getLatitud() {
        return latitud;
    }

    /**
     * @param latitud the latitud to set
     */
    public void setLatitud(String latitud) {
        this.latitud = latitud;
    }

    /**
     * @return the longitud
     */
    public String getLongitud() {
        return longitud;
    }

    /**
     * @param longitud the longitud to set
     */
    public void setLongitud(String longitud) {
        this.longitud = longitud;
    }

    /**
     * @return the calle
     */
    public String getCalle() {
        return calle;
    }

    /**
     * @param calle the calle to set
     */
    public void setCalle(String calle) {
        this.calle = calle;
    }

    /**
     * @return the nroCalle
     */
    public String getNroCalle() {
        return nroCalle;
    }

    /**
     * @param nroCalle the nroCalle to set
     */
    public void setNroCalle(String nroCalle) {
        this.nroCalle = nroCalle;
    }

    /**
     * @return the barrio
     */
    public String getBarrio() {
        return barrio;
    }

    /**
     * @param barrio the barrio to set
     */
    public void setBarrio(String barrio) {
        this.barrio = barrio;
    }

    /**
     * @return the localidad
     */
    public String getLocalidad() {
        return localidad;
    }

    /**
     * @param localidad the localidad to set
     */
    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }

    /**
     * @return the departamento
     */
    public String getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    /**
     * @return the provincia
     */
    public String getProvincia() {
        return provincia;
    }

    /**
     * @param provincia the provincia to set
     */
    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    /**
     * @return the pais
     */
    public String getPais() {
        return pais;
    }

    /**
     * @param pais the pais to set
     */
    public void setPais(String pais) {
        this.pais = pais;
    }


    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Localidad> autocompletadoLocalidades(Object evento){
        String preferencia = evento.toString();
        return this.gestorObraBean.encontrarLocalidadesPorNombre(preferencia.toUpperCase().trim()+"%");
    }

    /**
     * 
     * @param evento
     * @return
     */
    public List<datos.Localidad> autocompletadoLocalidadesEnc(Object evento){
        String preferencia = evento.toString();
        return this.gestorObraBean.encontrarLocalidadesPorNombre(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Pais> autocompletadoPaisesConsultaGeo(Object evento){
        String preferencia = evento.toString();
        return this.gestorGeoBean.encontrarPaisesPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     * 
     * @param evento
     * @return
     */
     public List<datos.Pais> autocompletadoPaisesConsultaGeoEnc(Object evento){
        String preferencia = evento.toString();
        return this.gestorGeoBean.encontrarPaisesPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Provincia> autocompletadoProvinciasConsultaGeo(Object evento){
       String preferencia = evento.toString();
       if(this.idPais!=-1)return this.gestorGeoBean.encontrarProvinciasPorNombreYPaisConsultaGeo(preferencia.toUpperCase().trim()+"%", this.idPais);
       else return this.gestorGeoBean.encontrarProvinciasPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     * 
     * @param evento
     * @return
     */
    public List<datos.Provincia> autocompletadoProvinciasConsultaGeoEnc(Object evento){
       String preferencia = evento.toString();
       if(this.idPaisEnc!=-1)return this.gestorGeoBean.encontrarProvinciasPorNombreYPaisConsultaGeo(preferencia.toUpperCase().trim()+"%", this.idPaisEnc);
       else return this.gestorGeoBean.encontrarProvinciasPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Departamento> autocompletadoDepartamentosConsultaGeo(Object evento){
       String preferencia = evento.toString();
       if(this.idProvincia!=-1)return this.gestorGeoBean.encontrarDepartamentosPorNombreYProvinciaConsultaGeo(preferencia.toUpperCase().trim()+"%",this.idProvincia);
       else return this.gestorGeoBean.encontrarDepartamentosPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
     public List<datos.Departamento> autocompletadoDepartamentosConsultaGeoEnc(Object evento){
       String preferencia = evento.toString();
       if(this.idProvinciaEnc!=-1)return this.gestorGeoBean.encontrarDepartamentosPorNombreYProvinciaConsultaGeo(preferencia.toUpperCase().trim()+"%",this.idProvinciaEnc);
       else return this.gestorGeoBean.encontrarDepartamentosPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Localidad> autocompletadoLocalidadesConsultaGeo(Object evento){
        String preferencia = evento.toString();
        if(this.idDepartamento!=-1)return this.gestorGeoBean.encontrarLocalidadesPorNombreYDptoConsultaGeo(preferencia.toUpperCase().trim()+"%", this.idDepartamento);
        else return this.gestorGeoBean.encontrarLocalidadesPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Localidad> autocompletadoLocalidadesConsultaGeoEnc(Object evento){
        String preferencia = evento.toString();
        if(this.idDepartamentoEnc!=-1)return this.gestorGeoBean.encontrarLocalidadesPorNombreYDptoConsultaGeo(preferencia.toUpperCase().trim()+"%", this.idDepartamentoEnc);
        else return this.gestorGeoBean.encontrarLocalidadesPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }
    /**
     *
     * @param evento
     * @return
     */
    public List<datos.TipoObra> autocompletadoTiposObraConsultaGeo(Object evento){
        String preferencia = evento.toString();
        return this.gestorGeoBean.encontrarTiposObraConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.SubtipoObra> autocompletadoSubtiposObraConsultaGeo(Object evento){
       String preferencia = evento.toString();
       if(this.idTipoObra!=-1)return this.gestorGeoBean.encontrarSubtiposPorNombreYTipoConsultaGeo(preferencia.toUpperCase().trim()+"%", this.idTipoObra);
       else return this.gestorGeoBean.encontrarSubtiposPorNombreConsultaGeo(preferencia.toUpperCase().trim()+"%");
    }

    /**
     *
     * @return
     */
    public List getObrasFiltradasConsultaGeo() {
        if (this.pais.toUpperCase().contains("Buscar pais...".toUpperCase())) {
            this.setIdPais(-1);
            this.setPais("");
        }
        if (this.provincia.toUpperCase().contains("Buscar provincia...".toUpperCase())) {
            this.setIdProvincia(-1);
            this.setProvincia("");
        }
        if (this.departamento.toUpperCase().contains("Buscar dpto...".toUpperCase())) {
            this.setIdDepartamento(-1);
            this.setDepartamento("");
        }
        if (this.localidad.toUpperCase().contains("Buscar localidad...".toUpperCase())) {
            this.setIdLocalidad(-1);
            this.setLocalidad("");
        }
        if (this.tipoObra.toUpperCase().contains("Buscar tipo...".toUpperCase())) {
            this.setIdTipoObra(-1);
            this.setTipoObra("");
        }
        if (this.subtipoObra.toUpperCase().contains("Buscar subtipo...".toUpperCase())) {
            this.setIdSubtipoObra(-1);
            this.setSubtipoObra("");
        }
        return this.gestorGeoBean.filtrarObrasConsultaGeo("%" + this.pais.toUpperCase().trim() + "%", "%" + this.provincia.toUpperCase().trim() + "%", "%" + this.departamento.toUpperCase().trim() + "%", "%" + this.localidad.toUpperCase().trim() + "%", "%" + this.tipoObra.toUpperCase().trim() + "%", "%" + this.subtipoObra.toUpperCase().trim() + "%");
    }

    /**
     *
     * @param e
     */
    public void verInfoObraConsultaGeo(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idObraVerInfo");
        this.setIdObra((Integer) Integer.parseInt(component.getValue().toString()));

    }

    /**
     *
     * @param e
     */
    public void limpiarConsultaGeoOyente(ActionEvent e){
        this.setIdDepartamento(-1);
        this.setIdDepartamentoEnc(-1);
        this.setIdLocalidad(-1);
        this.setIdLocalidadEnc(-1);
        this.setIdPais(-1);
        this.setIdPaisEnc(-1);
        this.setIdProvincia(-1);
        this.setIdProvinciaEnc(-1);
        this.setIdSubtipoObra(-1);
        this.setIdTipoObra(-1);
        this.setPais("");
        this.setPaisEnc("");
        this.setIdObra(-1);
        this.setProvincia("");
        this.setProvinciaEnc("");
        this.setDepartamento("");
        this.setDepartamentoEnc("");
        this.setLocalidad("");
        this.setLocalidadEnc("");
        this.setSubtipoObra("");
        this.setTipoObra("");
    }

    /**
     *
     * @param idObra
     * @return
     */
    public List getFotosPorObra(int idObra){
        return this.gestorFotosBean.fotosPorObra(idObra);
    }

//    /**
//     * @return the paises
//     */
//    public List<SelectItem> getPaises() {
//        List listaPaises = this.gestorObraBean.paisesRemote();
//        return cargarComboPais(listaPaises);
//    }

//    private List<SelectItem> cargarComboPais(List listaPaises) {
//        ArrayList arrayPaises = new ArrayList<SelectItem>();
//        try {
//            Iterator i = listaPaises.iterator();
//            datos.Pais p;
//            while (i.hasNext()) {
//                p = (datos.Pais) i.next();
//                arrayPaises.add(new SelectItem(p.getId(), p.getNombre()));
//            }
//            if(arrayPaises.isEmpty())arrayPaises.add(new SelectItem(-2,""));
//            return arrayPaises;
//        } catch (Exception e) {
//            return arrayPaises;
//        }
//    }

//    public void filtrarPorPaisOyente(ValueChangeEvent e){
//        int id = Integer.parseInt(e.getNewValue().toString());
//        this.setIdPais(id);
//        this.setIdProvincia(-1);
//        this.setIdDepartamento(-1);
//        this.setIdLocalidad(-1);
//        this.setProvincia("");
//        this.setDepartamento("");
//        this.setLocalidad("");
//    }

    /**
     * @return the zoom
     */
    public int getZoom() {
        return zoom;
    }

    /**
     * @param zoom the zoom to set
     */
    public void setZoom(int zoom) {
        this.zoom = zoom;
    }

    /**
     * @return the idPais
     */
    public int getIdPais() {
        return idPais;
    }

    /**
     * @param idPais the idPais to set
     */
    public void setIdPais(int idPais) {
        this.idPais = idPais;
    }

    /**
     * @return the idProvincia
     */
    public int getIdProvincia() {
        return idProvincia;
    }

    /**
     * @param idProvincia the idProvincia to set
     */
    public void setIdProvincia(int idProvincia) {
        this.idProvincia = idProvincia;
    }

    /**
     * @return the idDepartamento
     */
    public int getIdDepartamento() {
        return idDepartamento;
    }

    /**
     * @param idDepartamento the idDepartamento to set
     */
    public void setIdDepartamento(int idDepartamento) {
        this.idDepartamento = idDepartamento;
    }

    /**
     * @return the idLocalidad
     */
    public int getIdLocalidad() {
        return idLocalidad;
    }

    /**
     * @param idLocalidad the idLocalidad to set
     */
    public void setIdLocalidad(int idLocalidad) {
        this.idLocalidad = idLocalidad;
    }

    /**
     * @return the tipoObra
     */
    public String getTipoObra() {
        return tipoObra;
    }

    /**
     * @param tipoObra the tipoObra to set
     */
    public void setTipoObra(String tipoObra) {
        this.tipoObra = tipoObra;
    }

    /**
     * @return the subtipoObra
     */
    public String getSubtipoObra() {
        return subtipoObra;
    }

    /**
     * @param subtipoObra the subtipoObra to set
     */
    public void setSubtipoObra(String subtipoObra) {
        this.subtipoObra = subtipoObra;
    }

    /**
     * @return the idTipoObra
     */
    public int getIdTipoObra() {
        return idTipoObra;
    }

    /**
     * @param idTipoObra the idTipoObra to set
     */
    public void setIdTipoObra(int idTipoObra) {
        this.idTipoObra = idTipoObra;
    }

    /**
     * @return the idSubtipoObra
     */
    public int getIdSubtipoObra() {
        return idSubtipoObra;
    }

    /**
     * @param idSubtipoObra the idSubtipoObra to set
     */
    public void setIdSubtipoObra(int idSubtipoObra) {
        this.idSubtipoObra = idSubtipoObra;
    }

    /**
     * @return the idObra
     */
    public int getIdObra() {
        return idObra;
    }

    /**
     * @param idObra the idObra to set
     */
    public void setIdObra(int idObra) {
        this.idObra = idObra;
    }

    /**
     * @return the tipoAccionMapa
     */
    public String getTipoGeocoding() {
        return tipoGeocoding;
    }

    /**
     * @param tipoGeocoding
     */
    public void setTipoGeocoding(String tipoGeocoding) {
        this.tipoGeocoding = tipoGeocoding;
    }

    /**
     * @return the provinciaEnc
     */
    public String getProvinciaEnc() {
        return provinciaEnc;
    }

    /**
     * @param provinciaEnc the provinciaEnc to set
     */
    public void setProvinciaEnc(String provinciaEnc) {
        this.provinciaEnc = provinciaEnc;
    }

    /**
     * @return the departamentoEnc
     */
    public String getDepartamentoEnc() {
        return departamentoEnc;
    }

    /**
     * @param departamentoEnc the departamentoEnc to set
     */
    public void setDepartamentoEnc(String departamentoEnc) {
        this.departamentoEnc = departamentoEnc;
    }

    /**
     * @return the paisEnc
     */
    public String getPaisEnc() {
        return paisEnc;
    }

    /**
     * @param paisEnc the paisEnc to set
     */
    public void setPaisEnc(String paisEnc) {
        this.paisEnc = paisEnc;
    }

    /**
     * @return the localidadEnc
     */
    public String getLocalidadEnc() {
        return localidadEnc;
    }

    /**
     * @param localidadEnc the localidadEnc to set
     */
    public void setLocalidadEnc(String localidadEnc) {
        this.localidadEnc = localidadEnc;
    }

    /**
     * @return the idPaisEnc
     */
    public int getIdPaisEnc() {
        return idPaisEnc;
    }

    /**
     * @param idPaisEnc the idPaisEnc to set
     */
    public void setIdPaisEnc(int idPaisEnc) {
        this.idPaisEnc = idPaisEnc;
    }

    /**
     * @return the idProvinciaEnc
     */
    public int getIdProvinciaEnc() {
        return idProvinciaEnc;
    }

    /**
     * @param idProvinciaEnc the idProvinciaEnc to set
     */
    public void setIdProvinciaEnc(int idProvinciaEnc) {
        this.idProvinciaEnc = idProvinciaEnc;
    }

    /**
     * @return the idDepartamentoEnc
     */
    public int getIdDepartamentoEnc() {
        return idDepartamentoEnc;
    }

    /**
     * @param idDepartamentoEnc the idDepartamentoEnc to set
     */
    public void setIdDepartamentoEnc(int idDepartamentoEnc) {
        this.idDepartamentoEnc = idDepartamentoEnc;
    }

    /**
     * @return the idLocalidadEnc
     */
    public int getIdLocalidadEnc() {
        return idLocalidadEnc;
    }

    /**
     * @param idLocalidadEnc the idLocalidadEnc to set
     */
    public void setIdLocalidadEnc(int idLocalidadEnc) {
        this.idLocalidadEnc = idLocalidadEnc;
    }

   
    
}
